/******************************************************************************
 *
 *	Fichier:			Audio.cpp
 *
 *	Function:		Voir .h	
 *
 *	Auteur:			Tristan Stérin
 *
 *	Copyright:		Copyright (c) 2010 <whomever>
 *						Tous droits réservés
 *	Notes:			
 *
 *
 *	
 *****************************************************************************/

#include "Audio.h"
#include "global.h"

Audio *audio = new Audio(39, 1);

void verifieReussite(FMOD_RESULT result)
{
    if (result != FMOD_OK)
    {
		ErrorLog->addLog((char*)FMOD_ErrorString(result));
		game->setIsNotAnymoreRunning();
    }
}

/**********************************************************
Constructeur, initialise FMOD
@volumeDeBaseMusique : volume par défaut pour les musiques
@volumeDeBaseSon : volume par défaut pour les sons
***********************************************************/

Audio::Audio(int volumeDeBaseMusique, int volumeDeBaseSon)
{
	resultat = FMOD::System_Create(&systeme);
    
	verifieReussite(resultat);

	resultat = systeme->init(32, FMOD_INIT_NORMAL, NULL);
	verifieReussite(resultat);
	
	volume_musique = volumeDeBaseMusique;
	volume_son = volumeDeBaseSon;
	
	setVolumeMusique(32);
	setVolumeSon(32);
	
}

/*******************************
Permet de jouer un son.
@nomSon : nom du fichier sonore
********************************/

void Audio::jouerSon(const char *nomSon)
{
	std::string nSon = nomSon;//Conversion automatique
	resultat = systeme->createSound(nSon.c_str(), FMOD_SOFTWARE, 0, &son);
	verifieReussite(resultat);
    // On le joue
	resultat = systeme->playSound(FMOD_CHANNEL_FREE, son, 0, &channelSon);
	verifieReussite(resultat);
}

/*******************************
Permet de jouer une musique.
@nomSon : nom du fichier sonore
********************************/

void Audio::jouerMusique(const char *nomMusique)
{
	std::string nMusique = nomMusique;//Conversion automatique
	resultat = systeme->createSound(nMusique.c_str(), FMOD_SOFTWARE, 0, &musique);
	verifieReussite(resultat);
    // On le joue
	resultat = systeme->playSound(FMOD_CHANNEL_FREE, musique, 0, &channelMusique);
	verifieReussite(resultat);
}

/****************************
Règle le volume des sons
@volume : volume désiré
****************************/

void Audio::setVolumeSon(int volume)
{
	volume_son = (volume*4.0)/256.0;
	channelSon->setVolume(volume_son);
}

/****************************
Règle le volume des musiques
@volume : volume désiré
****************************/

void Audio::setVolumeMusique(int volume)
{
	volume_musique = (volume*4.0)/256.0;
	channelMusique->setVolume(volume_musique);
}

/*******************************
Permet de stoper un son
********************************/

void Audio::stopSon()
{
	channelSon->setPaused(true);
}

/*******************************
Permet de stoper une musique
********************************/

void Audio::stopMusique()
{
	channelMusique->setPaused(true);
}


/********************************
Destructeur désinitialise le tout
*********************************/

Audio::~Audio()
{
	son->release();
	musique->release();
	systeme->close();
	systeme->release();
	
    OutLog->addLog("Système audio détruit");
}